package com.hotacorp.opencloud.flowservice.service;

import java.util.Map;

import com.hotacorp.opencloud.common.mybatisplus.PageData;
import com.hotacorp.opencloud.flowservice.dto.ProcessInstanceRunInfo;
import com.hotacorp.opencloud.flowservice.dto.ProcessRequest;
import com.hotacorp.opencloud.flowservice.dto.TaskRequest;
import com.hotacorp.opencloud.flowservice.dto.TurnOverTaskRequest;

/**
 * 流程审批接口
 * @author lwg
 *
 */
public interface ProcessHandler {
	/**
	 * 开始一个流程
	 * @param username
	 * @param req
	 * @return
	 */
	String startProcess(String tenantid, String username, ProcessRequest req);
	/**
	 * 审批一个流程
	 * @param username
	 * @param req
	 */
	boolean approveProcess(String tenantid, String username, TaskRequest req);
	/**
	 * 终止一个流程
	 * @param username
	 * @param req
	 */
	boolean terminateProcess(String tenantid, String username, String processinstanceid);

	/**
	 * 委托一个流程
	 * @param tenantid
	 * @param username
	 * @param req
	 * @return
	 */
	boolean turnOverProcess(String tenantid, String username, TurnOverTaskRequest req);
	
	/**
	 * 待办流程
	 * @param tenantid
	 * @param username
	 * @param params
	 * @return
	 */
	PageData needDeal(String tenantid, String username, Map<String, Object> params);
	
	int getProcessStatus(String tenantid, String username, String processinstanceid);
	
	/**
	 * 取流程的运行信息
	 * @param tenantid
	 * @param username
	 * @param processinstanceid
	 * @return
	 */
	ProcessInstanceRunInfo getProcessRunInfo(String tenantid, String username, String processinstanceid) throws Exception;

	/**
	 * 挂起一个流程
	 * @param username
	 * @param req
	 */
	boolean suspendProcess(String tenantid, String username, String processinstanceid);
	
	/**
	 * 激活一个流程
	 * @param username
	 * @param req
	 */
	boolean activeProcess(String tenantid, String username, String processinstanceid);
}
